package com.ruoyi.common.utils.sql;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.exception.UtilException;
import com.ruoyi.common.utils.StringUtils;

import java.util.HashMap;
import java.util.LinkedHashMap;

/**
 * sql操作工具类
 *
 * @author ruoyi
 */
public class SqlUtil
{
    /**
     * 仅支持字母、数字、下划线、空格、逗号、小数点（支持多个字段排序）
     */
    public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";

    /**
     * 检查字符，防止注入绕过
     */
    public static String escapeOrderBySql(String value)
    {
        if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
        {
            throw new UtilException("参数不符合规范，不能进行查询");
        }
        return value;
    }

    /**
     * 验证 order by 语法是否符合规范
     */
    public static boolean isValidOrderBySql(String value)
    {
        return value.matches(SQL_PATTERN);
    }

    /**
     * 前端传来的排序字符串转为数据库可用的字符串
     * @param sortPara
     * @return
     */
    public static String sortParaTOStr(String sortPara){
     boolean firstFlag=true;
        if(null!=sortPara){
            StringBuffer result=new StringBuffer();
            HashMap<String,String> json=JSONObject. parseObject(sortPara, LinkedHashMap.class);
            for (String key: json.keySet()) {
                String value= json.get(key);
                value=value.replace("ending","");
                String keyStr=StringUtils.toUnderlineCase(key);
                if(null!=value&&!"".equals(value)){
                    if(!firstFlag){
                        result.append(" ,");
                    }else{
                        firstFlag=false;
                        result.append("");
                    }
                    result.append(keyStr).append(" ").append(value);
                }
            }
            return result.toString();
        }else{
            return null;
        }
    }
    /**
     * 对str进行简单的分词
     * @param str
     * @return
     */
    public  static String participleStr(String str){
        if(StringUtils.isEmpty(str)){
            return "";
        }
        StringBuffer result=new StringBuffer();
        result.append(">").append(str).append(" ");
        String arr[]=str.split("");
        int len=arr.length;
        for(int i=0;i<len-1;i++){
            int lenStr=i+1;//当前取词长度
            int catchNum=len-lenStr;//字符长度
            int subLen=len-catchNum+1;//当前长度可以取几个
            for(int j=0;j<subLen;j++){
                String strsub=str.substring(j,catchNum+j);
                if(i==0){
                    //相差一个字的加权重
                    result.append(">");
                }
                result.append(strsub).append(" ");
            }
        }
        return result.toString();
    }
}
